""" 日志封装 """
import logging
from nb_log import LogManager
import os
from config import baseconfig

loglevel = baseconfig.loglevel

LOGFORMAT = logging.Formatter('%(asctime)s -- %(levelname)s -- [%(filename)s->%(funcName)s->%(lineno)d->process:%(process)d->thread:%(thread)d] -- %(message)s')


def get_log(module: str = None, logpath=None, level: int = None):
    """
    生成一个日志对象
    @param
        :module: <str> | default_value: default, 模块名称，多个地方使用相同名称时，生成的是同一个日志对象。
            名称不同时，日志对象不同，可以有不同的行为，如记录到不同的文件，写不同级别，格式不同的日志;
        :logpath: <str> | default_value: './log/serve.log',日志路径和名称;
        :level: <int> | default_value: logging.ERROR ,日志记录级别;
    @return
        : <logging.Logger>
    """
    if module is None:
        module = 'default'
    if logpath is None:
        logpath = './log/serve.log'
    if level is None:
        level = logging.ERROR
    logger = LogManager(module).get_logger_and_add_handlers(level,
                                                            log_path=os.path.dirname(logpath),
                                                            log_filename=os.path.basename(logpath),
                                                            formatter_template=LOGFORMAT,
                                                            log_file_size=50,
                                                            do_not_use_color_handler=True)
    return logger


class MyLogger:
    """ 内部日志类，防止多次初始化内部日志变量，使用了类属性 """
    logger: logging.Logger = None
    flask_log: logging.Logger = None

    def __init__(self, module='api_base_func', logpath='./log/base.log', level=loglevel) -> None:
        if not self.logger:
            self.__class__.logger = get_log(module, logpath, level)  # 初始化内部日志
            # self.__class__.flask_log = get_log('werkzeug', './log/invoke_api.log', 10)  # 初始化flask内部日志
            # self.__class__.logger = get_log('werkzeug', logpath, level)


MyLogger()
